
const express = require('express')
const router = express.Router()

const article_handler = require('../router_handler/article')

// 导入解析form-data格式的表单数据 的中间件
const multer = require('multer')
// 导入路径处理的模块
const path = require('path')
// 创建multer的实例对象，通过dest属性指定文件的存放路径
const uploads = multer({ dest: path.join(__dirname, '../uploads') })

// 验证规则中间件
const expressJoi = require('@escook/express-joi')
// 验证规则对象
const { add_article_schema, get_article_list_schema, delete_article_by_id_schema, get_article_by_id_schema, edit_article_by_id_schema } = require('../schema/article')

// uploads.single() 是一个局部生效的中间件，用来解析FormData格式的表单数据
// 将文件类型的数据，解析(存储到指定的文件目录中)并挂载到 req.file 属性
// 将文本类型的数据，解析并挂载到 req.body 属性
// 参数是  上传文件的字段名称，会被解析成 fieldname属性的值
/**
解析后的文件对象信息如下：
{
  fieldname: 'cover_img',     字段名称
  originalname: 'icon.jpg',   上传的源文件名称
  encoding: '7bit',           编码方式
  mimetype: 'image/jpeg',     文件类型
  destination: 'C:\\Users\\lenovo\\Desktop\\练习\\项目--黑马大事件\\黑马大事件-前后端分离\\黑马6.5大事件-后端\\api_server\\uploads',  存放文件的绝对路径目录
  filename: 'a3da18c43253d17e0580222d5302b6c0',   存放的文件名称
  path: 'C:\\Users\\lenovo\\Desktop\\练习\\项目--黑马大事件\\黑马大事件-前后端分离\\黑马6.5大事件-后端\\api_server\\uploads\\a3da18c43253d17e0580222d5302b6c0',  文件本身的绝对路径
  size: 27196   文件大小
}
 */
// 注意：在当前的路由中，先后使用了两个中间件：
//       先使用 multer 解析表单数据
//       再使用 expressJoi 对解析的表单数据进行验证
router.post('/add', uploads.single('cover_img'), expressJoi(add_article_schema), article_handler.addArticle)

// 获取文章的列表数据
router.get('/list', expressJoi(get_article_list_schema), article_handler.getArticleList)
// 根据 Id 删除文章数据
router.get('/delete/:id', expressJoi(delete_article_by_id_schema), article_handler.deleteArticleById)
// 根据 Id 获取文章详情
router.get('/:id', expressJoi(get_article_by_id_schema), article_handler.getArticleById)
// 根据 Id 更新文章信息
router.post('/edit', uploads.single('cover_img'), expressJoi(edit_article_by_id_schema), article_handler.editArticleById)

module.exports = router